/*
 * ComponenteDistribuidorGeneradorEnum.java	 
 *
 * Copyright 2008 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 07/10/08, 11:23:38 AM
 */
package com.ufps.cuatro.modelo.representacion.componente;

import com.ufps.cuatro.controlador.render.UtilRender;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.ufps.cuatro.modelo.biblioteca.TipoBiblioteca;
import com.ufps.cuatro.modelo.old.ComponenteBeans;
import com.ufps.cuatro.modelo.representacion.Plantilla;
import com.ufps.cuatro.modelo.representacion.PlantillaCombo;
import com.ufps.cuatro.modelo.representacion.PlantillaComponente;
import com.ufps.cuatro.util.Utileria;
import com.ufps.cuatro.util.base.ComponenteBaseStandar;
import com.ufps.cuatro.util.generadores.codeobject.CodeContextLine;
import com.ufps.cuatro.util.generadores.codeobject.CodeProcessGeneratorSingle;
import com.ufps.cuatro.util.generadores.codeobject.EnumTypeCodeSyntax;


/**
 * <i><b>ComponenteDistribuidorGeneradorEnum:</b></i><p>Esta Clase permite representar 
 * Tipo de Dato Enum con Controles que Soporten Listas de Valores como JComboBox.</p>
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 07/10/08
 * @see     ComponenteDistribuidorGenerador
 * @see     CodeProcessGeneratorSingle
 */
public class ComponenteDistribuidorGeneradorEnum extends ComponenteDistribuidorGenerador implements CodeProcessGeneratorSingle{
    private static final long serialVersionUID = 3177635493121188050L;
           
    private int idClaseComponenteGeneradorEnumSimple;
    /**
     * Serie Númerica para la generación de id de Objetos.
     */
    public static int serialIdComponenteGeneradorEnum;        
    /**
     * Contiene el <code>ComponenteGeneradoInterno</code> Principal que representará el
     * Control Swing que asu vez representa el Tipo de Dato del Modelo Analizado.
     */
    protected ComponenteGeneradoInterno objComponenteGenerador;
    /**
     * Esta Cadena contiene los ids de <code>ComponenteGeneradoSimple</code> incluidos en la creación
     * del Componente.
     */
    protected String strComponentesGenerados;            
    private ArrayList<String> objItems;
    
    /**
     * Componente Utilizado en la Implementación.
     * @param objComponenteBase Referencia al <code>ComponenteBaseStandar</code> que representa un Control Swing.
     * @param strClassPathTipoDato classPath del Tipo de Dato.     
     * @param heredado Indica si el Componente hace parte de una Cadena de Herencia en una Instanciación de un Objeto.
     * @param previsualizar  Indica si el Componente puede generar vistas previas.
     */
    public ComponenteDistribuidorGeneradorEnum(ComponenteBaseStandar objComponenteBase, String strClassPathTipoDato, boolean heredado, boolean previsualizar) {
        super(objComponenteBase, strClassPathTipoDato, true, true); 
        this.heredado = heredado;
        this.previsualizar = previsualizar;        
        this.objItems = new ArrayList<String>();
        this.objComponentesGenerados = new ArrayList<ComponenteGeneradoSimple>();        
        this.dni = Utileria.leerRecursoTexto("Utileria.dni.componente.distribuidor.generador.enum");   
        if(!heredado){
            this.idClaseComponenteGeneradorEnumSimple = (!previsualizar) ?
                    ComponenteDistribuidorGeneradorEnum.serialIdComponenteGeneradorEnum++ :
                    ComponenteDistribuidorGeneradorEnum.serialIdComponenteGeneradorEnum;
        }
        if(strClassPathTipoDato.length() >= 2){
            int i = strClassPathTipoDato.lastIndexOf(".");
            this.strSimpleClassPathTipoDato = 
                    String.valueOf(Character.toUpperCase(strClassPathTipoDato.charAt(i + 1))) + 
                    strClassPathTipoDato.substring(i + 2);        
        }
    }

    /**
     * Devuelve el id de creación del Componente. 
     * @return id de creación del Componente. 
     */
    public int getIdClaseComponenteGeneradorEnum() {
       try{
            return idClaseComponenteGeneradorEnumSimple;
        }catch(java.lang.NullPointerException ex){}
       return 0;
    }  
    
    public void crearDistribuicionGrupalInicial(PlantillaCombo objPlantillaCombo, ArrayList<PlantillaComponente> objTempPlantillasComponentes){                
       try{
            ArrayList<Componente> objComponentesIncluidos = new ArrayList<Componente>();
            //Ubicar cada Plantilla con el Componente Asigando y Actualizar
            //Esta busqueda se hace por medio del id
            for(PlantillaComponente objTempPlantillaComponente : objTempPlantillasComponentes){
                if(!objTempPlantillaComponente.isGenerador()){
                    ComponenteGeneradoSimple objComponenteGenerado = this.objComponentesGenerados.get(objTempPlantillaComponente.getId());                
                    objComponenteGenerado.agregarDistribucionIndividual(objPlantillaCombo, objTempPlantillaComponente);
                    objComponentesIncluidos.add(objComponenteGenerado);
                }
                else{                
                    this.objComponenteGenerador.agregarDistribucionIndividual(objPlantillaCombo, objTempPlantillaComponente);
                    objComponentesIncluidos.add(this.objComponenteGenerador);
                }            
            }
            Distribuidor objDistribuidor = new Distribuidor(objComponentesIncluidos, objPlantillaCombo);
            this.agregarDistribucionGrupal(objPlantillaCombo, objDistribuidor);        
        }catch(java.lang.NullPointerException ex){}
    }
    
    public ArrayList<PlantillaComponente> getDistribucionGrupalInicialHorizontal(PlantillaCombo objPlantillaCombo){
        try{
            int size = this.objComponentesGenerados.size();
            int filas = 0;
            int proxX = 0;            
            ArrayList<PlantillaComponente> objTempPlantillas = new ArrayList<PlantillaComponente>();
            for(int i = 0; i < size; i++){                
                Object obj = this.objComponentesGenerados.get(i);
                PlantillaComponente objPlantilla = new PlantillaComponente();
                if(obj instanceof ComponenteGeneradoSimple){
                    ComponenteGeneradoSimple objComponenteGenerado = (ComponenteGeneradoSimple) obj;                    
                    objPlantilla.setX(proxX);
                    objPlantilla.setY(filas);                    
                    objPlantilla.updateGridBadConstraintsFromComponente(objComponenteGenerado, objPlantillaCombo, true);
                    objPlantilla.setGenerador(false);
                    objPlantilla.setHeight(objComponenteGenerado.getObjGridBagConstraints().gridheight);
                    objPlantilla.setWidth(objComponenteGenerado.getObjGridBagConstraints().gridwidth);                    
                    objPlantilla.setIdComponente(objComponenteGenerado.getId());
                    objPlantilla.setId(i);
                    objPlantilla.setIdPlantilla(0);
                    objPlantilla.setIncluido(true);
                    objPlantilla.setZona(0);
                    this.objComponentesGenerados.set(i, objComponenteGenerado);
                }                
                proxX = objPlantilla.getObjGridBagConstraints().gridwidth;
                objTempPlantillas.add(objPlantilla);
            }
            //Se crea la Plantilla Componente para el Componente Parent
            PlantillaComponente objPlantilla = new PlantillaComponente();                            
            objPlantilla.setX(proxX);
            objPlantilla.setY(filas);            
            objPlantilla.updateGridBadConstraintsFromComponente(objComponenteGenerador, objPlantillaCombo, true);
            objPlantilla.setGenerador(true);
            objPlantilla.setHeight(this.objComponenteGenerador.getObjGridBagConstraints().gridheight);
            objPlantilla.setWidth(this.objComponenteGenerador.getObjGridBagConstraints().gridwidth);                    
            objPlantilla.setIdComponente(this.objComponenteGenerador.getId());
            objPlantilla.setId(objTempPlantillas.size());
            objPlantilla.setIdPlantilla(0);
            objPlantilla.setIncluido(true);
            objPlantilla.setZona(0);
            objTempPlantillas.add(objPlantilla);
            return objTempPlantillas;
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorEnum.class.getName()).log(Level.SEVERE, null, ex);            
        }
        return null;
    }
    
    public ArrayList<PlantillaComponente> getDistribucionGrupalInicialVertical(PlantillaCombo objPlantillaCombo){
        try{
            int size = this.objComponentesGenerados.size();
            int columnas = 0;
            int proxX = 0;            
            ArrayList<PlantillaComponente> objTempPlantillas = new ArrayList<PlantillaComponente>();
            for(int i = 0; i < size; i++){                
                Object obj = this.objComponentesGenerados.get(i);
                PlantillaComponente objPlantilla = new PlantillaComponente();
                if(obj instanceof ComponenteGeneradoSimple){
                    ComponenteGeneradoSimple objComponenteGenerado = (ComponenteGeneradoSimple) obj;                    
                    objPlantilla.setX(columnas);
                    objPlantilla.setY(proxX);                    
                    objPlantilla.updateGridBadConstraintsFromComponente(objComponenteGenerado, objPlantillaCombo, true);
                    objPlantilla.setGenerador(false);
                    objPlantilla.setHeight(objComponenteGenerado.getObjGridBagConstraints().gridheight);
                    objPlantilla.setWidth(objComponenteGenerado.getObjGridBagConstraints().gridwidth);                    
                    objPlantilla.setIdComponente(objComponenteGenerado.getId());
                    objPlantilla.setId(i);
                    objPlantilla.setIdPlantilla(0);
                    objPlantilla.setIncluido(true);
                    objPlantilla.setZona(0);
                    this.objComponentesGenerados.set(i, objComponenteGenerado);                    
                }           
                proxX = objPlantilla.getObjGridBagConstraints().gridheight;
                objTempPlantillas.add(objPlantilla);
            }
            //Se crea la Plantilla Componente para el Componente Parent
            PlantillaComponente objPlantilla = new PlantillaComponente();                            
            objPlantilla.setX(columnas);
            objPlantilla.setY(proxX);            
            objPlantilla.updateGridBadConstraintsFromComponente(objComponenteGenerador, objPlantillaCombo, true);
            objPlantilla.setGenerador(true);
            objPlantilla.setHeight(this.objComponenteGenerador.getObjGridBagConstraints().gridheight);
            objPlantilla.setWidth(this.objComponenteGenerador.getObjGridBagConstraints().gridwidth);                    
            objPlantilla.setIdComponente(this.objComponenteGenerador.getId());
            objPlantilla.setId(objTempPlantillas.size());
            objPlantilla.setIdPlantilla(0);
            objPlantilla.setIncluido(true);
            objPlantilla.setZona(0);
            objTempPlantillas.add(objPlantilla);
            return objTempPlantillas;
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorEnum.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    public ArrayList<PlantillaComponente> getDistribucionGrupalInicialRectangular(PlantillaCombo objPlantillaCombo){
        try{
            return null;
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorEnum.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    /**
     * Deveuvle la Cadena que contiene los ids de <code>ComponenteGeneradoSimple</code> incluidos en la creación
     * del Componente.
     * @return Cadena que contiene los ids de <code>ComponenteGeneradoSimple</code> incluidos en la creación
     * del Componente.
     */
    public String getStrComponentesGenerados() {
       try{
        return strComponentesGenerados;
        }catch(java.lang.NullPointerException ex){}
       return "";
    }

    /**
     * Establece la Cadena que contiene los ids de <code>ComponenteGeneradoSimple</code> incluidos en la creación
     * del Componente.
     * @param strComponentesGenerados Cadena que contiene los ids de <code>ComponenteGeneradoSimple</code> incluidos en la creación
     * del Componente.
     */
    public void setStrComponentesGenerados(String strComponentesGenerados) {        
        this.strComponentesGenerados = strComponentesGenerados;
    }

    /**
     * Devuelve la Referencia que Contiene el <code>ComponenteGeneradoInterno</code> Principal que representará el
     * Control Swing que asu vez representa el Tipo de Dato del Modelo Analizado.
     * @return <code>ComponenteGeneradoInterno</code> Principal que representará el
     * Control Swing que asu vez representa el Tipo de Dato del Modelo Analizado.
     */
    public ComponenteGeneradoInterno getObjComponenteGenerador() {
        return objComponenteGenerador;
    }

    /**
     * Establece la Referencia que Contiene el <code>ComponenteGeneradoInterno</code> Principal que representará el
     * Control Swing que asu vez representa el Tipo de Dato del Modelo Analizado.
     * @param objComponenteGenerador Contiene el <code>ComponenteGeneradoInterno</code> Principal que representará el
     * Control Swing que asu vez representa el Tipo de Dato del Modelo Analizado.
     */
    public void setObjComponenteGenerador(ComponenteGeneradoInterno objComponenteGenerador) {
        this.objComponenteGenerador = objComponenteGenerador;
    }   
    
    public int sizeWidth(){        
       try{
            int size = 0;        
            for(ComponenteGeneradoSimple objComponente : this.objComponentesGenerados){
                size += objComponente.getObjPlantillaComponenteDistribucionIndividualSeleccionada().getObjGridBagConstraints().gridwidth;
            }
            return size + this.objComponenteGenerador.getObjPlantillaComponenteDistribucionIndividualSeleccionada().getObjGridBagConstraints().gridwidth;        
        }catch(java.lang.NullPointerException ex){}
       return 0;
    }

    public int sizeHeight(){        
      try{
        int size = 0;
        for(ComponenteGeneradoSimple objComponente : this.objComponentesGenerados){
            size += objComponente.getObjPlantillaComponenteDistribucionIndividualSeleccionada().getObjGridBagConstraints().gridheight;
        }
        return size + this.objComponenteGenerador.getObjPlantillaComponenteDistribucionIndividualSeleccionada().getObjGridBagConstraints().gridheight;        
        }catch(java.lang.NullPointerException ex){}
      return 0;
    }
    
    public boolean ubicarComponentesEnTablaDistribucion(){        
        try{
            Distribuidor objDistribuidorSeleccionado = this.getObjDistribuidorGrupalSeleccionado();
            return objDistribuidorSeleccionado.generarTablaDistribucion();
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorEnum.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
   
    public Componente buscarComponente(String strName){
//       if(strName != null){            
            strName = Utileria.formatStringSinHTML(strName);
            Componente objComponente;
            //Primero se Busca en la Colección de Componentes Incluidos
            objComponente = this.buscarComponenteEnDistribucion(strName);
            if(objComponente != null){
                return objComponente;
            }
            //Luego busco en los Componentes Generados
            objComponente = this.getObjComponenteIncluido(strName);
            if(objComponente != null){
                return objComponente;
            }
            if(this.objComponenteGenerador.getName().equals(strName)){
                return this.objComponenteGenerador;
            }
            return null;
        }
//        else{
//            UtilRender.printlnConsole("strName Nulo.", UtilRender.ACTION_NORMAL, false);            
//        }
        
        

    @Override
    @SuppressWarnings("deprecation")
    public String toString() {
      try{
        if(this.eBiblioteca == TipoBiblioteca.eSwap) {
            return this.objClassSwing.getSimpleName() + "BS" + this.dni + this.idClaseComponenteGeneradorEnumSimple;
        }
        else if(this.eBiblioteca == TipoBiblioteca.eLocal) {
            return this.objClassSwing.getSimpleName() + "BL" + this.dni + this.idClaseComponenteGeneradorEnumSimple;
        }
        else if(this.eBiblioteca == TipoBiblioteca.eGlobal) {
            return this.objClassSwing.getSimpleName() + "BG" + this.dni + this.idClaseComponenteGeneradorEnumSimple;
        }
        else if(this.getObjPropiedadesDisponibles() != null){            
            //se evalua si la propiedad name ha sido inicializada
            if(!this.getObjPropiedadesDisponibles().isEmpty()){                
                return this.getName();
            }
        }
        return this.objClassSwing.getSimpleName() + this.dni + this.idClaseComponenteGeneradorEnumSimple;
    }catch(java.lang.NullPointerException ex){}
      return "";
    }
    
    @Override
    public int compareTo(Object o) {
      try{
        if(o instanceof ComponenteDistribuidorGeneradorClase ||                
                o instanceof ComponenteDistribuidorIntegrador ||
                o instanceof ComponenteDistribuidorGeneradorUnitario ||
                o instanceof ComponenteDistribuidorGeneradorString ||
                o instanceof ComponenteDistribuidorGeneradorVinculador){
            return 1;
        }                
        else{
            ComponenteDistribuidorGeneradorEnum obj = (ComponenteDistribuidorGeneradorEnum) o;
            if(this.idClaseComponenteGeneradorEnumSimple > obj.idClaseComponenteGeneradorEnumSimple)
                return 1;
            else if(this.idClaseComponenteGeneradorEnumSimple < obj.idClaseComponenteGeneradorEnumSimple)
                return -1;
            else
                return 0;
        }
    }catch(java.lang.NullPointerException ex){}
      return 0;
    }   
    
    public boolean actualizarPlantillaComboDistribucionGrupalSeleccionada(PlantillaCombo objPlantillaComboSeleccionada) {
      try{
        try{
            this.objComponenteGenerador.objPlantillaComboDistribucionIndividualSeleccionada = objPlantillaComboSeleccionada;
            for(ComponenteGeneradoSimple objComponenteGenerado : this.objComponentesGenerados){
                objComponenteGenerado.setObjPlantillaComboDistribucionIndividualSeleccionada(objPlantillaComboSeleccionada);
            }
            //this.getObjDistribuidorGrupalSeleccionado().actualizarPlantillaComboSeleccionada(objPlantillaComboDistribucionIndividualSeleccionada);
            return true;
        }catch(java.lang.ArrayIndexOutOfBoundsException ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorEnum.class.getName()).log(Level.SEVERE, null, ex);            
        }catch(java.lang.ArrayStoreException ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorEnum.class.getName()).log(Level.SEVERE, null, ex);            
        }
        }catch(java.lang.NullPointerException ex){}
        return false;
    }      

    /**
     * Devuelve la <code>PlantillaComponente</code> de la <code>Plantilla</code>
     * seleccionada asociada al <code>ComponenteGeneradorSimple</code> para 
     * representarlo y distribuirlo automaticamente en la Interfaz Gráfica Actual.
     * @param objPlantilla Plantilla Asociada al <code>ComponenteGeneradorSimple</code> actual.
     * @return <code>PlantillaComponente</code> que representa el <code>ComponenteGeneradorSimple</code> actual.
     */
    public PlantillaComponente getObjPlantillaComponenteGenerador(Plantilla objPlantilla){
      try{
        for(PlantillaComponente objPlantillaComponente : objPlantilla.getObjPlantillasComponentes()){
            if(objPlantillaComponente.isGenerador())
                return objPlantillaComponente;
        }
        return null;
        }catch(java.lang.NullPointerException ex){}
      return null;
    }    

    @Override
    public void ok() {
        if(this.previsualizar){
            this.idClaseComponenteGeneradorEnumSimple = ComponenteDistribuidorGeneradorEnum.serialIdComponenteGeneradorEnum++;
            this.previsualizar = false;
        }
    }    

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof ComponenteDistribuidorGeneradorEnum){
            ComponenteDistribuidorGeneradorEnum objComponente = (ComponenteDistribuidorGeneradorEnum) obj;
            return this.toString().equals(objComponente.toString());
        }
        return super.equals(obj);
    }

    @Override
    public int hashCode() {
       try{
            int hash = 7;
            return hash;
        }catch(java.lang.NullPointerException ex){}
       return 0;
    }
    
    /**
     * Método para Sincronizar el id en la Biblioteca en la cual será incluido.
     * @param id @DefinicionParametro
     */
    public void importId(int id){
        ComponenteDistribuidorGeneradorEnum.serialIdComponenteGeneradorEnum = ++id;
        this.idClaseComponenteGeneradorEnumSimple = ComponenteDistribuidorGeneradorEnum.serialIdComponenteGeneradorEnum++;
    }
    
    /**
     * Devuelve la Colección de Items de la Enumeración.
     * @return Colección de Items de la Enumeración.
     */
    public ArrayList<String> getObjItems() {
        try{
            return objItems;
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    
    /**
     * Establece la Colección de Items de la Enumeración.
     * @param objItems 
     */
    public void setObjItems(ArrayList<String> objItems) {
        this.objItems = objItems;
    }            

    @Override
    public Componente getObjComponenteIncluido(String strName) { 
        try{            
            for(ComponenteGeneradoSimple objComponenteGenerado : this.getObjComponentesGenerados()){
                String strPropertiesName = (String) objComponenteGenerado.getName();
                if(strName.equals(strPropertiesName)){
                    return objComponenteGenerado;                    
                }                
            }             
            String strPropertiesName = (String) this.objComponenteGenerador.getName();
            if(strName.equals(strPropertiesName)){
                return this;
            }            
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    
    //    @Override
//    protected Object clone(){
//        ComponenteGeneradorSimple objClon = null;                 
//        //Primero se Clona la Referencia Local
//        objClon = (ComponenteGeneradorSimple) super.clone();                                
//        //Ahora se hace la Clonación Profunda
//        if(objCasosCompatibles != null){
//            ((ComponenteGeneradorSimple)objClon).setObjCasosCompatibles(objCasosCompatibles);
//        }
//        if(objComponenteIncluido != null){
//            ((ComponenteGeneradorSimple)objClon).setObjComponenteIncluido((ComponenteDistribuidorGenerador)objComponenteIncluido.clone());
//        }
//        if(objComponenteModeloAsociado != null){
//            ((ComponenteGeneradorSimple)objClon).setObjComponenteModeloAsociado((ArrayList<ComponenteGenerador>)objComponenteModeloAsociado.clone());
//        }
//        if(objComponentesGenerados != null){
//            ((ComponenteGeneradorSimple)objClon).setObjComponentesGenerados((ArrayList<ComponenteGenerado>)objComponentesGenerados.clone());
//        }
//        if(objPlantillaComponenteSeleccionada != null){
//            ((ComponenteGeneradorSimple)objClon).setObjPlantillaComponenteSeleccionada((PlantillaComponente)objPlantillaComponenteSeleccionada.clone());
//        }
//        if(objPlantillaSeleccionada != null){
//            ((ComponenteGeneradorSimple)objClon).setObjPlantillaSeleccionada((Plantilla<Componente>)objPlantillaSeleccionada.clone());
//        }
//        if(objPlantillas != null){
//            ((ComponenteGeneradorSimple)objClon).cargarPlantillasDesdeArchivoProperties((ArrayList<Plantilla<Componente>>)objPlantillas.clone());
//        }
//        if(objPlantillasComboDistribucionesGrupales != null){
//            ((ComponenteGeneradorSimple)objClon).setObjPlantillasCombos((ArrayList<PlantillaCombo>)objPlantillasComboDistribucionesGrupales.clone());
//        }        
//        return objClon;
//    }   

    public ComponenteDistribuidor convertirEnComponenteLibre() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    public ComponenteBeans generarRepresentacionBeans() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ArrayList<CodeContextLine> generateSourceCodeSyntax(EnumTypeCodeSyntax eTypeCodeSintax) {
        ArrayList<CodeContextLine> objSourceLinesCode = new ArrayList<CodeContextLine>();        
        if(eTypeCodeSintax == EnumTypeCodeSyntax.eImport){
            generateSourceCodeSyntaxFaseImport(objSourceLinesCode);
        }        
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsDefinitionSimple){
            generateSourceCodeSyntaxDefinition(objSourceLinesCode, false);
        }        
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsDefinitionCanonical){
            generateSourceCodeSyntaxDefinition(objSourceLinesCode, true);
        }
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsInitializationSimple){
            generateSourceCodeSyntaxInitialization(objSourceLinesCode, false);
        }        
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsInitializationCanonical){
            generateSourceCodeSyntaxInitialization(objSourceLinesCode, true);
        }
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsInitializationPropertiesSimple){
            generateSourceCodeSyntaxInitializationPropertiesControls(objSourceLinesCode, false);
        }
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsInitializationPropertiesCanonical){
            generateSourceCodeSyntaxInitializationPropertiesControls(objSourceLinesCode, true);
        }
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsInitializationGridBagConstraintsSimple){
            generateSourceCodeSyntaxInitializationGridBagConstraintsControls(objSourceLinesCode, false);
        }
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsInitializationGridBagConstraintsCanonical){
            generateSourceCodeSyntaxInitializationGridBagConstraintsControls(objSourceLinesCode, true);
        }        
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsDefinitionEventsSimple){
            generateSourceCodeSyntaxControlsEventsDefinition(objSourceLinesCode, false);
        }
        else if(eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsDefinitionEventsCanonical ||
                eTypeCodeSintax == EnumTypeCodeSyntax.eFieldsDefinitionEventsFunctionCanonical){
            generateSourceCodeSyntaxControlsEventsDefinition(objSourceLinesCode, true);
        }        
        return objSourceLinesCode;
    }

    @Override
    public CodeContextLine generateSingleSourceCodeSyntax(EnumTypeCodeSyntax eTypeCodeSintax) {
        if(eTypeCodeSintax == EnumTypeCodeSyntax.eImportAsociateModel){
            return this.generateSourceCodeSyntaxImportAsociateModel();
        }
        return null;
    }      
    
    public void generateSourceCodeSyntaxDefinition(ArrayList<CodeContextLine> objSourceLinesCode, boolean canonicalDefinition){
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxDefinition(canonicalDefinition));
                        if(objComponenteGenerado.isComponentCollection()){
                            addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxDefinitionAsociateScroll(canonicalDefinition));
                        }
                        if(objComponenteGenerado.isContainsStaticListModelString()){
                            addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSintaxDefinitionStaticListModel());
                        }
                    }                    
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }
    
    public void generateSourceCodeSyntaxInitialization(ArrayList<CodeContextLine> objSourceLinesCode, boolean canonicalDefinition){
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        if(objComponenteGenerado.isContainsStaticListModelString()){
                            addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSintaxInitializationWithStaticModelString());
                        }
                        else{
                            addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxInitialization(canonicalDefinition));
                        }
                        if(objComponenteGenerado.isComponentCollection()){
                            //addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxDefinitionAsociateScroll(canonicalDefinition));
                        }
                    }                    
                }
            }                        
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }
    
    public void generateSourceCodeSyntaxInitializationPropertiesControls(ArrayList<CodeContextLine> objSourceLinesCode, boolean canonicalDefinition){
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxCollectionProperties(canonicalDefinition));
                        if(objComponenteGenerado.isComponentCollection()){
                            //addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxDefinitionAsociateScroll(canonicalDefinition));
                        }
                    }                    
                }
            }                        
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }
    
    public void generateSourceCodeSyntaxInitializationGridBagConstraintsControls(ArrayList<CodeContextLine> objSourceLinesCode, boolean canonicalDefinition){
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        //addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxGridBagConstraints(objComponenteGenerado.getGridBagConstraintsActiva(), canonicalDefinition));
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxGridBagConstraints(objComponenteGenerado.getObjGridBagConstraintsGUI(), canonicalDefinition));
                    }                    
                }
            }                        
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }
    
    public void generateSourceCodeSyntaxControlsEventsDefinition(ArrayList<CodeContextLine> objSourceLinesCode, boolean canonicalDefinition){
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxCollectionEvents(canonicalDefinition));
                    }                    
                }
            }                        
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }    
    
    public void generateSourceCodeSyntaxControlsEventsImplement(ArrayList<CodeContextLine> objSourceLinesCode, boolean canonicalDefinition){
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxCollectionEvents(canonicalDefinition));
                    }                    
                }
            }                        
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldDefinitionInstance(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxDefinition(true));
                        if(objComponenteGenerado.isComponentCollection()){
                            addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxDefinitionAsociateScroll(true));
                        }
                        if(objComponenteGenerado.isContainsStaticListModelString()){
                            addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSintaxDefinitionStaticListModel());
                        }                        
                    }                    
                }
                else if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;
                    objComponenteDistribuidor.generateSourceCodeSyntaxFaseFieldDefinitionInstance(objSourceLinesCode);
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }      
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldDefinitionClass(ArrayList<CodeContextLine> objSourceLinesCode) {
        UtilRender.printlnConsole("Fase No Requerida en la Generación de Código del Contexto Actual.", UtilRender.ACTION_NORMAL, false);
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldDefinitionConstant(ArrayList<CodeContextLine> objSourceLinesCode) {
        UtilRender.printlnConsole("Fase No Requerida en la Generación de Código del Contexto Actual.", UtilRender.ACTION_NORMAL, false);
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldInitializationInstance(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        if(objComponenteGenerado.isContainsStaticListModelString()){
                            addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSintaxInitializationWithStaticModelString());
                        }
                        else{
                            addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxInitialization(true));
                        }
                        if(objComponenteGenerado.isComponentCollection()){
                            addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxInitializationAsociateScroll(true));
                        }                        
                    }                    
                }
                else if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;
                    objComponenteDistribuidor.generateSourceCodeSyntaxFaseFieldInitializationInstance(objSourceLinesCode);
                }
            }                        
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldInitializationClass(ArrayList<CodeContextLine> objSourceLinesCode) {
        UtilRender.printlnConsole("Fase No Requerida en la Generación de Código del Contexto Actual.", UtilRender.ACTION_NORMAL, false);
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldInitializationProperties(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxCollectionProperties(true));
                        if(objComponenteGenerado.isComponentCollection()){
                            //addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxDefinitionAsociateScroll(canonicalDefinition));
                        }
                    }                    
                }
            }                        
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldInitializationGridBagConstraints(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        //addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxGridBagConstraints(objComponenteGenerado.getGridBagConstraintsActiva(), canonicalDefinition));
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxGridBagConstraints(objComponenteGenerado.getObjGridBagConstraintsGUI(), true));
                    }
                }
            }                        
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseMethodDefinitionEvent(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxCollectionEvents(true));
                    }
                }
            }             
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseMethodImplementEvent(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxCollectionEvents(true));
                    }
                }
            }            
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseMethodImplementFunctionSet(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxFunctionGetSet(true));
                    }                    
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseMethodImplementFunctionGet(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteGenerado){                    
                    ComponenteGenerado objComponenteGenerado = (ComponenteGenerado) objComponenteDistribuido;
                    if(objComponenteGenerado.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteGenerado.generateSourceCodeSyntaxFunctionGetSet(true));
                    }                    
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorUnitario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
